///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//																													 //
//																													 //
//																													 //
//									PROGRAMME BANQUE																 //
//																													 //
//																													 //
//																													 //
//																													 //
// Créé par:	Celine Gobat																					 	 //	
//				Benoit Petit																						 //
//				Johann Plug																					 		 //
//				Gary Criblez																						 //
//				Emmanuel Rondez																						 //
//																													 //
//																													 //
//																													 //
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



Program Banque;

USES 
	Clients, Types, Comptes,Crt;
	// Ajout Crt pour la fonction ClrScr qui permet d'effacer l'ecran;
	
// Création d'un procédure pour eviter la repetition du code		
Procedure client(ID_Client:INTEGER ;VAR tabClient:TTabClient;VAR tabCompte:TTabCompte);
	Var
		choixClient : STRING;
		choixCompte : STRING;
		precedent1:boolean;
		precedent2:boolean;
		//sortieChoixCompte:Boolean;
		ID_Compte:INTEGER;
		compte : TCompte;
		bonCompte : boolean;
		i:INTEGER;
		temp:INTEGER;
		indice:INTEGER;
		
	Begin
		indice := indiceClient(ID_Client,tabClient);
		IF (indice <> -1) THEN
			BEGIN
				i:=0;
				precedent1 := False;
				WHILE (NOT precedent1) DO
					begin
						i+=1;
						ClrScr;
						//Afficher Client choisit
						WRITELN('---------------------------------------');
						WRITELN('                Operation CLIENT       ');
						WRITELN('---------------------------------------');
						WRITELN('Vous travaillez sur le compte du client :');
						afficheclient(ID_Client,TabClient);
						WRITELN('');	
						WRITELN('MENU CLIENT');
						WRITELN('');
						WRITELN('1 Modifier ce client');
						WRITELN('2 Creer un compte a ce client');
						WRITELN('3 Selectionner un compte de ce client');
						WRITELN('4 Supprimer ce client');
						WRITELN('5 Precedent');
						WRITELN('');
						WRITE('Entrer votre choix: ');
						READLN(choixClient);									
								
						CASE choixClient OF
							'1': 
								begin
									modificationClient(ID_Client,tabClient);
								end;
							'2': 
								begin
									creationCompte(ID_Client,tabCompte);
								end;
							'3': 
								begin
									ClrScr;
									//sortieChoixCompte:=false;
									WRITELN('---------------------------------------');
									WRITELN('                SELECTION COMPTE       ');
									WRITELN('---------------------------------------');
									afficheComptes(ID_Client,tabCompte);
									
									{ID_Compte := testCompte (ID_client,ID_Compte,TabCompte);}
									WRITELN('0 pour sortir');
									WRITE('Veuillez entrer l''ID du compte avec lequel vous souhaitez travailler : ');
									READ(ID_Compte);
									//IF(ID_Compte =0) THEN//JOHANN
									//	sortieChoixCompte:=TRUE;//JOHANN
									//WHILE(NOT sortieChoixCompte) DO//JOHANN
									//	BEGIN//JOHANN
											compte := findCompte(TabCompte,indiceCompte(ID_Compte,TabCompte));
											bonCompte := false; 
											WHILE (ID_Client <> compte.IDclient) AND (NOT bonCompte) AND (ID_Compte<>0) DO
												begin
													WRITELN('');
													WRITELN('L''ID de compte que vous avez entre n''appartient pas a ce client !');
													WRITELN('');
													WRITE('Veuillez entrer l''ID du compte avec lequel vous souhaitez travailler : ');
													READ(ID_Compte);
													WRITELN('');
															
													//IF(ID_Compte =0) THEN//JOHANN
													//	BEGIN//JOHANN
													//		sortieChoixCompte:=TRUE;//JOHANN
													//	END;//JOHANN
																	
													compte := findCompte(TabCompte,indiceCompte(ID_Compte,TabCompte));
													IF (ID_Client = compte.IDclient) THEN
														bonCompte := TRUE 
													ELSE
														bonCompte := FALSE;
																			
												end; // End DoWhile
											{selectionCompte(ID_Client);}
											precedent2 := False;

											WHILE (NOT precedent2) AND (ID_Compte<>0) DO //Rajouter la sortie du choix compte
												begin
													ClrScr;
													WRITELN('---------------------------------------');
													WRITELN('                Operation COMPTE       ');
													WRITELN('---------------------------------------');
													WRITELN('Vous travaillez sur le compte :');
													WRITELN('');
													afficheCompte(ID_Compte,tabCompte);
													WRITELN('MENU COMPTE');
													WRITELN('');
													WRITELN('1 Debiter ce compte');
													WRITELN('2 Crediter ce compte');
													WRITELN('3 Virer une somme d''argent');
													WRITELN('4 Supprimer ce compte');
													WRITELN('5 Precedent');
													WRITE('Entrer votre choix : ');
													READLN(choixCompte);
													CASE choixCompte OF
														'1':
															begin
																retrait(ID_Compte,tabCompte);
															end;
														'2': 
															begin
																depot(ID_Compte,tabCompte);
															end;
														'3': 
															begin
																virement(ID_Compte,tabCompte);
															end;
														'4': 
															begin
																temp:=tabcompte.nbcompte;
																cloture(ID_Compte,tabCompte);
																writeln('debug');
																if (temp<>tabcompte.nbcompte) then
																	begin
																	precedent2 := true;
																	//sortieChoixCompte:=TRUE;
																	end;
																writeln('debug1');
															end;
														'5': 
															begin
																precedent2 := TRUE;
																//sortieChoixCompte:=TRUE;//JOHANN
															end;
													end;
										
										end; // END DOWHILE MENU COMPTE	
						//END;//JOHANN - FIN de la boucle permettant la sortie du menu			
								end; //END CaseMenuClient Selection 3
							'4': 
								begin
									temp:=tabClient.nbelement;
									suppressionClient(ID_Client,tabClient,tabCompte);
									IF (Temp<>tabClient.nbelement) THEN // si il y suppression on remonte au menu precedent
										precedent1 := TRUE;
								end;
							'5': 
								begin
									precedent1 := TRUE;
								end;	
							end; // END CASE MENUCLIENT
					end; // Fin DoWhile MENU Client								
		end; // END IF PAS DE CLIENT TROUVE		
	End; // Fin procedure
	
VAR
	choixMenu: STRING;
	
	EXIT : boolean;

	ID_Client : integer;

	tabClient : TTabclient;
	tabCompte : TTabCompte;
	Unclient : TClient;

begin
	Window(1,1,80,100); // Initialisation Windows
	tabClient.nbelement:=0;
	tabClient.DernierIDClient:=0;
	//Initialisation Client
	Unclient.nom:= 'Petit';
	Unclient.prenom:= 'Benoit';
	Unclient.naissance:= '15.05.1991'; 
	Unclient.politesse:= 'Monsieur';
	Unclient.adresse:= 'Chemin du Secheron 5';
	Unclient.npa:= '1132';
	Unclient.localite:= 'Lully';
	Unclient.telephone:= '0796208831';
	addClient(tabClient,Unclient);
	
	tabCompte.tabcompte[1].IDcompte := 1;
	tabCompte.tabcompte[1].IDclient := 1;
	tabCompte.tabcompte[1].Libelle := 'Epargne';
	tabCompte.tabcompte[1].taux := 2.5;
	tabCompte.tabcompte[1].solde := 1000;
	tabCompte.tabcompte[1].limite := 0;
	
	tabCompte.tabcompte[2].IDcompte := 2;
	tabCompte.tabcompte[2].IDclient := 1;
	tabCompte.tabcompte[2].Libelle := 'Courant';
	tabCompte.tabcompte[2].taux := 0.5;
	tabCompte.tabcompte[2].solde := 0;
	tabCompte.tabcompte[2].limite := 500;
 
	Unclient.nom:= 'Plug';
	Unclient.prenom:= 'Johann';
	Unclient.naissance:= '12.05.1992';
	Unclient.politesse:= 'Monsieur';
	Unclient.adresse:= 'Rte de l''Eglise 2';
	Unclient.npa:= '1064';
	Unclient.localite:= 'Etoy';
	Unclient.telephone:= '0794997979';
	addClient(tabClient,Unclient);
	
	tabCompte.tabcompte[3].IDcompte := 3;
	tabCompte.tabcompte[3].IDclient := 2;
	tabCompte.tabcompte[3].Libelle := 'Courant';
	tabCompte.tabcompte[3].taux := 0.5;
	tabCompte.tabcompte[3].solde := 0;
	tabCompte.tabcompte[3].limite := 500;
	
	tabCompte.tabcompte[4].IDcompte := 4;
	tabCompte.tabcompte[4].IDclient := 2;
	tabCompte.tabcompte[4].Libelle := 'Epargne';
	tabCompte.tabcompte[4].taux := 1.5;
	tabCompte.tabcompte[4].solde := 500;
	tabCompte.tabcompte[4].limite := 0;
	
	Unclient.nom:= 'Petit';
	Unclient.prenom:= 'Benoit';
	Unclient.naissance:= '12.05.1992';
	Unclient.politesse:= 'Monsieur';
	Unclient.adresse:= 'Rte de l''Eglise 2';
	Unclient.npa:= '1064';
	Unclient.localite:= 'Etoy';
	Unclient.telephone:= '0794997979';
	addClient(tabClient,Unclient);
	
	tabCompte.nbcompte := 4;
	tabCompte.IDListcompte := 4;
		
	
	// Fin Initialisation Client

	EXIT := TRUE;
	WHILE (EXIT = TRUE) DO
		begin
			ClrScr;
			//afficheComptes(1,tabCompte);
			WRITELN(' ------------------------------------------------------------------------------ ');
			WRITELN('|                                                                              |');
			WRITELN('|                                                                              |');
			WRITELN('|                                                                              |');
			WRITELN('|                              PROGRAMME BANQUE                                |');
			WRITELN('|                                                                              |');
			WRITELN('|                                                                              |');
			WRITELN('|                                                                              |');
			WRITELN('|                                                                              |');
			WRITELN('|                                                                              |');
			WRITELN(' ----------------------------------------------------------------------------- ');
			choixMenu:='0';
			WRITELN('Quelle commande voulez-vous executer');
			WRITELN('');
			WRITELN('1. Rechercher un client avec son nom et prenom');
			WRITELN('2. Rechercher un client avec son ID');
			WRITELN('3. Creer un client');
			WRITELN('4. Afficher tous les clients');
			WRITELN('5. Quitter');
			WRITELN('');
			WRITE('Entrer votre choix : ');
			READLN(choixMenu);
			WRITELN('');

			CASE (choixMenu) OF
				'1':
					begin
						ID_Client := rechercheClient(tabClient,'','');
						client(ID_Client,tabClient,tabcompte);			
					end;
				'2':
					begin
						//ID_Client := rechercheClient(tabClient,'','');
						WRITE('Saississez l''ID du client :');
						READLN (ID_Client);
						client(ID_Client,tabClient,tabcompte);				
					end;
				'3': 
					begin
						creationClient(tabClient);
					end;
				'4': 
					begin
						WRITELN('Listing de tous les clients (',tabClient.nbelement,' Clients)');
						WRITELN('');
						listing(tabCLient);
						WRITELN('Taper ENTER pour continuer');
						READLN();
					end;
				'5': 
					begin
						EXIT := FALSE;
					end;
				//Default: 
					//WRITELN ('Veuillez entrer le chiffre qui correspond à la commande souhaitée');
			end;
		End;
END.	
